// 防抖-事件触发时，在n秒内只能执行一次，如果再次触发，将会重新调整执行时间
// 场景：1、搜索框模糊查询  2、根据屏幕宽度计算弹窗大小 3、手机号、邮箱校验
function debounce(func, n) {
    let timer;
    return () => {
        clearTimeout(timer)
        timer = setTimeout(func, n)
    }
}

// 节流-在规定时间内只能执行一次
// 场景：1、频繁提交操作 2、滚动条监听 3、拖拽
function throttle1(func, n) {
    let timer;
    return () => {
        if (!timer) {
            timer = setTimeout(() => {
                func();
                timer = null;
            }, n)
        }
    }
}

function throttle2(func, n) {
    let time1 = Date.now();
    return () => {
        let time2 = Date.now();
        if ((time2 - time1) >= n * 1000) {
            func();
            time1 = Date.now();
        }
    }
}